package com.hy;

import java.util.LinkedList;
import java.util.List;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:字母大小写全排列
 *
 * 给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
 * 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
 * User:Mr.Du
 * Date:2023/10/20
 * Time:10:33
 */
public class LetterCasePermutation {

    LinkedList<String> res = new LinkedList<>();
    public List<String> letterCasePermutation(String s) {
        dfs(s.toCharArray(), 0);
        return res;
    }

    public void dfs(char[] chars, int start){
        res.add(new String(chars));
        if(start == chars.length){
            return;
        }

        for(int i = start;i < chars.length;i++){
            if(Character.isDigit(chars[i])) continue;
            // chars[i] ^= 32;
            if(Character.isUpperCase(chars[i])){
                chars[i] += 32;
            }else{
                chars[i] -= 32;
            }
            dfs(chars, i + 1);
            // chars[i] ^= 32;
            if(Character.isUpperCase(chars[i])){
                chars[i] += 32;
            }else{
                chars[i] -= 32;
            }

        }
    }


    public static void main(String[] args) {
        LetterCasePermutation letterCasePermutation = new LetterCasePermutation();
        List<String> res = letterCasePermutation.letterCasePermutation("c");
        System.out.println(res);
        System.out.println(64 ^ 32);
        System.out.println('A' ^ 32);

    }
}
